/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package presentacion;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import negocio.Cliente;
import negocio.ControladorFacturasyEstadosCuenta;
import negocio.Factura;
import Auxiliares.Contantes;
import negocio.DesgloseFactura;
/**
 *
 * @author Esteban
 */
public class PanelEstadosCuenta extends javax.swing.JPanel implements Contantes{

    private static PanelEstadosCuenta _Instancia;
    private ControladorFacturasyEstadosCuenta _ControladorFacturas;
    public PanelPrincipal _PanelPrincipal;
    
    /**
     * Creates new form PanelEstadosCuenta
     */
    private PanelEstadosCuenta() {
        initComponents();
        visibilidadTablaDiaria(false);
    }

    public static PanelEstadosCuenta getInstance(){
        if(_Instancia == null)
            _Instancia = new PanelEstadosCuenta();
        return _Instancia;
    }
    
    
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblSaldoDiario = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        lblSaldoMensual = new javax.swing.JLabel();
        btnCancelar = new javax.swing.JButton();
        scrollTabla = new javax.swing.JScrollPane();
        tablaResultadosBusqueda = new javax.swing.JTable();
        scrollTabla1 = new javax.swing.JScrollPane();
        tablaResultadosBusquedaDetalle = new javax.swing.JTable();
        jLabel6 = new javax.swing.JLabel();
        lblMsj = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();

        setMaximumSize(new java.awt.Dimension(900, 700));
        setMinimumSize(new java.awt.Dimension(900, 700));
        setLayout(null);

        lblSaldoDiario.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        lblSaldoDiario.setForeground(new java.awt.Color(255, 255, 255));
        lblSaldoDiario.setText(".....");
        lblSaldoDiario.setName("lblSaldoDiario");
        lblSaldoDiario.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                lblSaldoDiarioMouseEntered(evt);
            }
        });
        add(lblSaldoDiario);
        lblSaldoDiario.setBounds(670, 330, 180, 38);

        jLabel4.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        jLabel4.setForeground(new java.awt.Color(255, 255, 255));
        jLabel4.setText("Saldo del mes :");
        jLabel4.setName("jLabel3");
        add(jLabel4);
        jLabel4.setBounds(670, 390, 180, 38);

        jLabel5.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        jLabel5.setForeground(new java.awt.Color(255, 255, 255));
        jLabel5.setText("Productos por venta:");
        jLabel5.setName("jLabel3");
        add(jLabel5);
        jLabel5.setBounds(40, 390, 250, 38);

        lblSaldoMensual.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        lblSaldoMensual.setForeground(new java.awt.Color(255, 255, 255));
        lblSaldoMensual.setText(".....");
        lblSaldoMensual.setName("lblSaldoDiario");
        add(lblSaldoMensual);
        lblSaldoMensual.setBounds(670, 440, 180, 38);

        btnCancelar.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        btnCancelar.setForeground(new java.awt.Color(204, 0, 0));
        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        add(btnCancelar);
        btnCancelar.setBounds(650, 600, 230, 44);

        scrollTabla.setAutoscrolls(true);

        tablaResultadosBusqueda.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        tablaResultadosBusqueda.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null}
            },
            new String [] {
                "Factura Numero", "Fecha", "Total", "Pagado", "Vuelto"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tablaResultadosBusqueda.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaResultadosBusquedaMouseClicked(evt);
            }
        });
        scrollTabla.setViewportView(tablaResultadosBusqueda);

        add(scrollTabla);
        scrollTabla.setBounds(40, 160, 570, 190);

        scrollTabla1.setAutoscrolls(true);

        tablaResultadosBusquedaDetalle.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        tablaResultadosBusquedaDetalle.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null}
            },
            new String [] {
                "Producto", "Precio", "Tipo", "Cantidad", "Total"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tablaResultadosBusquedaDetalle.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaResultadosBusquedaDetalleMouseClicked(evt);
            }
        });
        scrollTabla1.setViewportView(tablaResultadosBusquedaDetalle);

        add(scrollTabla1);
        scrollTabla1.setBounds(40, 430, 570, 230);

        jLabel6.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        jLabel6.setForeground(new java.awt.Color(255, 255, 255));
        jLabel6.setText("Saldo diario    :");
        jLabel6.setName("jLabel3");
        add(jLabel6);
        jLabel6.setBounds(670, 270, 180, 38);

        lblMsj.setFont(new java.awt.Font("Andalus", 1, 24)); // NOI18N
        lblMsj.setForeground(new java.awt.Color(255, 255, 255));
        lblMsj.setText("NO HAY VENTAS EL DIA DE HOY");
        lblMsj.setName("jLabel3");
        add(lblMsj);
        lblMsj.setBounds(220, 80, 380, 38);

        jLabel9.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        jLabel9.setForeground(new java.awt.Color(255, 255, 255));
        jLabel9.setText("Ventas diarias:");
        jLabel9.setName("jLabel3");
        add(jLabel9);
        jLabel9.setBounds(40, 120, 180, 38);

        jLabel8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/fondoEstadoCuenta.png"))); // NOI18N
        jLabel8.setName("jLabel8");
        add(jLabel8);
        jLabel8.setBounds(0, 0, 900, 700);
    }// </editor-fold>//GEN-END:initComponents

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        // TODO add your handling code here:
        ((DefaultTableModel)tablaResultadosBusquedaDetalle.getModel()).setRowCount(0);
        ((DefaultTableModel)tablaResultadosBusqueda.getModel()).setRowCount(0);
        _PanelPrincipal = PanelPrincipal.getInstancia();
        this.setVisible(false);
        _PanelPrincipal.setVisible(true);
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void tablaResultadosBusquedaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaResultadosBusquedaMouseClicked

        int lines = ((DefaultTableModel)tablaResultadosBusqueda.getModel()).getRowCount();
        System.out.print(lines + " as lines");
        if(lines > 0){
        int row = tablaResultadosBusqueda.getSelectedRow();
        String idFactura = tablaResultadosBusqueda.getModel().getValueAt(row, 0).toString();
        
        ((DefaultTableModel)tablaResultadosBusquedaDetalle.getModel()).setRowCount(0);
        _ControladorFacturas = ControladorFacturasyEstadosCuenta.getInstance();
        Vector<DesgloseFactura> facturas = _ControladorFacturas.retornaDesgloseFactura(Integer.parseInt(idFactura));
        
        cargarTablaDetalle(facturas);
        }
    }//GEN-LAST:event_tablaResultadosBusquedaMouseClicked

    private void lblSaldoDiarioMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblSaldoDiarioMouseEntered
        visibilidadTablaDiaria(true);
        //this.tablaResultadosBusqueda.setVisible(true);
    }//GEN-LAST:event_lblSaldoDiarioMouseEntered

    private void tablaResultadosBusquedaDetalleMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaResultadosBusquedaDetalleMouseClicked
        // TODO add your handling code here:
    }//GEN-LAST:event_tablaResultadosBusquedaDetalleMouseClicked

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCancelar;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JLabel lblMsj;
    private javax.swing.JLabel lblSaldoDiario;
    private javax.swing.JLabel lblSaldoMensual;
    private javax.swing.JScrollPane scrollTabla;
    private javax.swing.JScrollPane scrollTabla1;
    private javax.swing.JTable tablaResultadosBusqueda;
    private javax.swing.JTable tablaResultadosBusquedaDetalle;
    // End of variables declaration//GEN-END:variables

    public void cargarEstados(){
        
        _ControladorFacturas = ControladorFacturasyEstadosCuenta.getInstance();
       ((DefaultTableModel)tablaResultadosBusquedaDetalle.getModel()).setRowCount(0);
       ((DefaultTableModel)tablaResultadosBusqueda.getModel()).setRowCount(0);
        
        //sacamos las ventas diarias.
        Vector<Factura> ventasDiarias = _ControladorFacturas.retornaVentasDiarias();
        cargarTablaDiarios(ventasDiarias);
        
        //sacamos el total de esas ventas y lo ponemos en el label adecuado
        this.lblSaldoDiario.setText(""+_ControladorFacturas.retornaTotalVentasDiarias(ventasDiarias)+ "");
        this.lblSaldoMensual.setText(""+_ControladorFacturas.retornaVentasMensuales());
    }
    
    private void cargarTablaDiarios(Vector<Factura> resp){
      
        if(resp.size() > 0){
            this.tablaResultadosBusqueda.setVisible(true);
            //primero tenemos que decirle a la tabla, la cual se carga con un model, de cuantas filas será
            ((DefaultTableModel)tablaResultadosBusqueda.getModel()).setRowCount(resp.size());
            
            
            //cargamos la tabla
            for(int cont = 0; cont < resp.size(); cont++){
                //setValueAt(usuarios.elementAt(cont).getCedula().toString(), cont, 0);
                Factura fact = resp.elementAt(cont);
                tablaResultadosBusqueda.setValueAt(fact.getIdFactura(), cont, 0);
                tablaResultadosBusqueda.setValueAt(fact.getFecha(), cont, 1);
                tablaResultadosBusqueda.setValueAt(fact.getTotalFactura(), cont, 2);
                tablaResultadosBusqueda.setValueAt(fact.getTotalPagado(), cont, 3);
                tablaResultadosBusqueda.setValueAt(fact.getVuelto(), cont, 4);
            }
            
            this.lblMsj.setVisible(false);
        }else{
          //JOptionPane.showMessageDialog(null, MENSAJE_NO_VENTASDIARIAS, TITULO_NO_VENTASDIARIAS, JOptionPane.INFORMATION_MESSAGE);
           this.lblMsj.setVisible(true);
        }
            
    }
    
    private void cargarTablaDetalle(Vector<DesgloseFactura> resp){
      
        if(resp.size() > 0){
            this.tablaResultadosBusquedaDetalle.setVisible(true);
            //primero tenemos que decirle a la tabla, la cual se carga con un model, de cuantas filas será
            ((DefaultTableModel)tablaResultadosBusquedaDetalle.getModel()).setRowCount(resp.size());
            
            
            //cargamos la tabla
            for(int cont = 0; cont < resp.size(); cont++){
                //setValueAt(usuarios.elementAt(cont).getCedula().toString(), cont, 0);
                DesgloseFactura fact = resp.elementAt(cont);
                tablaResultadosBusquedaDetalle.setValueAt(fact.getNombre(), cont, 0);
                tablaResultadosBusquedaDetalle.setValueAt(fact.getPrecio(), cont, 1);
                tablaResultadosBusquedaDetalle.setValueAt(fact.getTipo(), cont, 2);
                tablaResultadosBusquedaDetalle.setValueAt(fact.getCantidad(), cont, 3);
                tablaResultadosBusquedaDetalle.setValueAt(fact.getTotal(), cont, 4);
            }
        }else{
          JOptionPane.showMessageDialog(null, MENSAJE_NOENCONTRO_NOMBRE, TITULO_NOENCONTRO, JOptionPane.ERROR_MESSAGE);
        }
            
    }
    
    
    private void visibilidadTablaDiaria(boolean estado){
        //para ocultar una columna 
        //TableColumn column  = columnModel.getColumnByModelIndex(0);
        //yourColumnModel.setColumnVisible(column, false);
       // this.tablaResultadosBusqueda.getTableHeader().setVisible(estado);
       // this.tablaResultadosBusqueda.setVisible(estado);
        
    }
}
